package com.pignest.hotel.dao;
 
import java.util.Date;
import java.util.List;

import com.pignest.hotel.beans.AdjustAccountHistory;
import com.pignest.hotel.beans.Living;
import com.pignest.hotel.beans.LivingSpecifics;
import com.pignest.hotel.beans.TbAccounts;
import com.pignest.hotel.beans.TbCloseAccounts;
import com.pignest.hotel.beans.TbLiveGoodsBorrow;
import com.pignest.hotel.util.PageResult;

public interface InComeDao {
	/**
	 *  查询
	 * @param  
	 */

	

	/**查询调帐记录*/
	public List<AdjustAccountHistory> queryAdjustHistory(final String livingId,
			final String accountId,final String roomName,final String name,final Date sAdjustTime,final Date eAdjustTime,
			final String adjustUser );
	/***根据多入住查询出账务记录**/
    public List<TbAccounts> queryAccoutsByMulLiving(List<Living> list);
    
    /***根据单入住查询出账务未结记录**/
    public List<TbAccounts> queryAccountBySingleLiving(Living l);
    /**根据多入住查询统计账务记录
     * @param list 多入住记录
     * @param isCustorm true 则按客人统计false 则按消费项目统计 
     * */
    public List queryAccStaticByMulLiving(List<Living> list,boolean isCustorm);
    /**根据多入住查询统计账务记录
     * @param list 多入住记录
     * @param type 1 按消费项目 2 则按客人统计 3 按房间 统计 
     * */
    public List queryAccStaticByMulLiving(List<Living> list,int type,String state);
    /**根据多入住查询统计账务记录
     * @param list 单入住记录
     * @param type 1 按消费项目 2 则按客人统计 3 按房间 统计 
     * */
    public List queryAccStaticByLiving(String livingId,int type,String state);
    
    public List<Living> queryBySelf(List<Living> list);
    /**
     * 入住是否有未归还的记录
     * **/
    public List<TbLiveGoodsBorrow> isNoBorrow(List<Living> list);
    
    /**查询结账时总计的天数*/
    public float queryCheckOutDay(Living l,boolean isCheckOut,List<TbAccounts> acc);
    /**计算单个所有入住消费
     * @param living l
     * @param isPositive
     * ***/
    public int countAllConsumsUsed(Living l,boolean isPositive,Boolean isChecked);
    /**
     * 计算多个入住的消费
     * @param 多个入住
     * @param isPositive true 正数
     * */
    public int countAllConsumsUsed(List<Living> ls,boolean isPositive);
    
    /**计算单个所有入住消费
	 * 
	 * @param l 单个入住
	 * @param isPositive true 返回正数 false 反之
	 * @param isCheckOut true 包括已结账的，false 未结账的
	 * ***/
	public int countAllConsums(Living l,boolean isCheckOut,boolean  isPositive );
	
	/**计算多个所有入住消费
	 * @param ls 多个入住
	 * @param isCheckOut true 包括已结账的，false 未结账的
	 * @param isPositive true 返回正数 false 反之
	 * **/
	public int countAllConsums(List<Living> ls,boolean isCheckOut,boolean isPositive);
	/**计算总存款
     * @param ls多个入住
     * @param isCheckOut 是否结账 
     * 目前的业务没有对存款进行部分结账
     * ***/
	
	public int countAllStorages(List<Living> ls,boolean isCheckOut);
	/**计算个人总存款
	 * @param living
	 * @param isCheckout true 已结账 false 未结账
	 * */
	public int countAllStroages(Living l,boolean isCheckOut);
	
	/**计算押金
	 * @param ls 多个入住
	 * @param isCheckOut 是否结账
	 * ***/
	public int countAllDeposit(List<Living> ls,boolean isCheckOut);
	/**计算押金
	 * @param l 单个入住
	 * @param isCheckOut 是否结账
	 * ***/
	public int countAllDeposit(Living l,boolean isCheckOut);
	
	/**
	 * 查询已经结账的消费
	 * @param isPositive 是否为正数返回
	 */
	public int countPayed(Living l,boolean isPositive );
	
	/**
	 * 查询单个房费
	 * 
	 * */
	public int countRoomConsums(Living l,boolean isPositive);
	
	/**
	 * 查询已结账的单个入住房费包括正常房费、调整费、加收房费
	 * 
	 * */
	public int countRoomConsumsChecked(Living l,boolean isPositive,List<TbAccounts> acc);
	/**
	 * 查询多个房费
	 * 
	 * */
	public int countRoomConsums(List<Living> ls,boolean isPositive);
	
	 /**
     * 查询其它消费除了押金、房费、续存款、加收房费、房间调整费*/
    public int countOtherAccount(Living l,boolean isPositive);
    
    /**
     * 按类型查询项目消费*/
    public int countTypeAccount(Living l,boolean isPositive,String type,Boolean isChecked,List<TbAccounts> acc);
    /**
     * 查询余额消费*/
    public int countBalance(Living l,boolean isPositive);
    /**查询当前的多个入住的消费
     * 
     * */
    public int countCurCumsums(List<Living> ls);
	
	/**单入住下的所有账务包括押金等
	 * @param l
	 * @param isCheckout
	 * */
	public List<TbAccounts> queryAccountsList(Living l,boolean isCheckOut);
	/**多入住下的所有账务包括押金等
	 * @param l
	 * @param isCheckout
	 * 
	 * */
	public List<TbAccounts> queryAccountsList(List<Living> ls,boolean isCheckOut);
	/**查询已使用的消费**/
	public List<TbAccounts> queryAccountUsedList(List<Living> list,boolean isCheckOut);
	/**查询单个已使用的消费*/
	public List<TbAccounts> queryAccountUsedList(String livingId,boolean isCheckOut);
	
	public List<TbAccounts> queryAllAccountUsedList(List<Living> list,String state);
	public List<TbAccounts> queryAllAccountUsedList(String livingId,String state);
	public int countAllConsumsByState(Living l,String state );
	public int countAllConsumsByState(List<Living> ls,String state);
	
	public List<TbCloseAccounts> queryCloseAccPage(final String username,
			final String type, final String orderNo, final String roomName,
			final String roomTypeId,final Integer invoice,final Date sDate,
			final Date eDate, final int start,final int length);
	public List<TbCloseAccounts> queryCloseAccNoPage(final String username,
			final String type, final String orderNo, final String roomName,
			final String roomTypeId,final Integer invoice,final Date sDate,
			final Date eDate);
}
